クローズド環境のGitHub欲しいよね! GitBucket編|アドカレ2013 : CFn #13
よく訓練されたアップル信者、都元です。アドベントカレンダー2013「AWS CloudFormationビッグバンテンプレート」、本日は13日目です。ああ、今日って13日の金曜日なんすねー。
さてさて、昨日はしんやさんのOpenPNE編でした。
GitHubクローン
GitHubが流行ってしばらく経ち、世の中にはOSSのGitHubクローンがうまれました。その中でもGitLabは有名ですね。しかし本日はGitLabではなく、Scalaで書かれたGitHubクローン「GitBucket」をAWS環境に一発構築してみましょう。
ちなみに、GitBucketの作者様は@takezoenさんという方です。日本製です。また、私の好きなデータアクセスフレームワーク「Mirage SQL」も@takezoenさん作です。私がエンジニアの道に引き込まれたのも@takezoenさんの書いた本が一因だと思います。おっと、話が脱線しましたww
今回の構成
特に面白く無いので構成図は書きませんが。今回の特徴は Elastic Beanstalk を使ったテンプレートである、ということです。Beantstalk自体使っている人が多くない印象ですが、それをCloudFormationから呼び出す例となると、一層珍しいんじゃないでしょうか。そういった物珍しさも感じていただければと。
"GitbucketApplication" : { "Type" : "AWS::ElasticBeanstalk::Application", "Properties" : { "Description" : "Gitbucket Application", "ApplicationVersions" : [{ "VersionLabel" : { "Ref":"GitbucketVersion" }, "Description" : { "Fn::Join" : ["", [ "Version ", { "Ref":"GitbucketVersion" } ]]}, "SourceBundle" : { "S3Bucket" : "cm-public-cfn-templates", "S3Key" : { "Fn::Join" : ["", [ "gitbucket/gitbucket-", { "Ref":"GitbucketVersion" }, ".war" ]]} } }], "ConfigurationTemplates" : [{ "TemplateName" : "DefaultConfiguration", "Description" : "Default Configuration", "SolutionStackName" : "64bit Amazon Linux running Tomcat 7", "OptionSettings" : [ { "Namespace" : "aws:autoscaling:launchconfiguration", "OptionName" : "EC2KeyName", "Value" : { "Ref" : "KeyName" } }, { "Namespace" : "aws:autoscaling:launchconfiguration", "OptionName" : "SecurityGroups", "Value" : { "Ref" : "GitbucketSecurityGroup" } }, { "Namespace" : "aws:autoscaling:launchconfiguration", "OptionName" : "IamInstanceProfile", "Value" : { "Ref" : "PowerUserProfile" } }, { "Namespace" : "aws:autoscaling:launchconfiguration", "OptionName" : "InstanceType", "Value" : { "Ref" : "InstanceType" } }, { "Namespace" : "aws:elasticbeanstalk:application", "OptionName" : "Application Healthcheck URL", "Value" : "/" }, { "Namespace" : "aws:elasticbeanstalk:environment", "OptionName" : "EnvironmentType", "Value" : "SingleInstance" }, { "Namespace" : "aws:elasticbeanstalk:hostmanager", "OptionName" : "LogPublicationControl", "Value" : "true" }, { "Namespace" : "aws:elasticbeanstalk:container:tomcat:jvmoptions", "OptionName" : "JVM Options", "Value" : "" }, { "Namespace" : "aws:elasticbeanstalk:container:tomcat:jvmoptions", "OptionName" : "Xmx", "Value" : "512m" }, { "Namespace" : "aws:elasticbeanstalk:container:tomcat:jvmoptions", "OptionName" : "XX:MaxPermSize", "Value" : "128m" } ] }] } },
OptionSettingsの部分で、Beanstalkに対する設定をいろいろやってます。だいたい想像つきますよね。他にはどんなオプションがあるのかは、ドキュメント等を御覧ください。
今回の構成は、Multi-AZ構成ではありません。きちんと可用性を担保するためには、アプリケーションに対する様々な設定が必要です。また、データはEC2インスタンスローカルに保持されている状態ですので、terminateには充分ご注意ください。
起動っ!
今回はデモも何もなく。さっくり起動しましょう。
パラメータは以下のとおりです。オープンで良いのならGitHubを使うはず、わざわざ別サーバを立てるということは、何らかのアクセス制御をしたいのでしょう。従って、SSHFromやHTTPFromでIPアドレスベースのアクセス制御ができるようになっています。制限したくなければ0.0.0.0/0で良いです。
- KeyName: ECのキーペア名。EC2へのSSH接続用。
- SSHFrom: GitBucketサーバへのSSHアクセスを許すIPブロック(CIDR表記)
- HTTPFrom: pGitBucketサーバへのHTTPアクセスを許すIPブロック(CIDR表記)
- InstanceType: GitBucketが動くサーバののインスタンスタイプ
- GitbucketVersion: GitBucketのバージョンです。現在最新は1.8ですね。現状、1.0〜1.8にまで対応しています。
GitBucketサーバにアクセスしてみよう
さて、スタックを作り終わったら、OutputsにIPアドレスがあるはずですので、そこにHTTPでアクセスします。
管理者アカウントの初期状態は root / root なので、ログインしてすぐに変更しましょう。あとは直感で色々わかるはずです!(丸投げ
例によってGitHubに公開済みです
このテンプレートは例によってGitHubに公開済みです。要望・改善案等ございましたら、issue発行なりpull requestなり、ご自由にどうぞ!